package com.lhy.mymall.controller;

import com.github.pagehelper.PageInfo;
import com.lhy.mymall.common.ApiRestResponse;
import com.lhy.mymall.exception.MallException;
import com.lhy.mymall.request.AddCategoryReq;
import com.lhy.mymall.service.CategoryService;
import com.lhy.mymall.service.UserService;
import com.lhy.mymall.vo.CategoryVO;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;

/**
 * @author: 卢辉宇
 * @date: 2022/12/14 12:32
 * @description: 商品目录Controller层
 */
@RestController
public class CategoryController {

    @Resource
    CategoryService categoryService;

    /**
     * 添加商品目录方法
     * @param addCategoryReq 需要修改的字段，把它封装成类似实体类的请求类
     * @return
     */
    @PostMapping("/admin/category/add")
    public ApiRestResponse addCategory(@Valid @RequestBody AddCategoryReq addCategoryReq) throws MallException {

        //判断需要修改信息的参数是否都不为空（通常通过注解@Valid进行参数的约束）
//        if(addCategoryReq.getName()==null||addCategoryReq.getType()==null||addCategoryReq.getParentId()==null||addCategoryReq.getOrderNum()==null){
//            return ApiRestResponse.error(ExceptionEnum.NAME_NOT_NULL);
//        }

//        //通过session保存的信息判断是否为管理员用户登录
//        User currentUser = (User)session.getAttribute(Constant.MALL_USER);
//        //判断是否登录
//        if (currentUser==null){
//            return ApiRestResponse.error(ExceptionEnum.NEED_LOGIN);
//        }

//        //判断是否是管理员
//        boolean adminRole = userService.checkAdminRole(currentUser);
//        if (adminRole){
            //是管理员。。。
            categoryService.addCategory(addCategoryReq);
            return ApiRestResponse.success();
//        }else {
//            //不是管理员
//            return ApiRestResponse.error(ExceptionEnum.NEED_ADMIN);
//        }
    }

    /**
     * 删除目录方法，需要配置过滤器来校验登录用户身份
     * @param id 需要删除的目录id
     * @return
     */
    @PostMapping("/admin/category/delete")
    public ApiRestResponse deleteCategory(@RequestParam Integer id) throws MallException {
        //配置过滤器
        //service层进行删除业务操作。。。
        categoryService.deleteCategory(id);
        return ApiRestResponse.success();
    }

    /**
     * 后台目录列表
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 通过PageHelper封装好的目录列表信息
     */
    @PostMapping("/admin/category/list")
    public ApiRestResponse listCategoryForAdmin(@RequestParam Integer pageNum,@RequestParam Integer pageSize){
        //service分页业务逻辑。。。
        PageInfo pageInfo = categoryService.listForAdmin(pageNum, pageSize);
        return ApiRestResponse.success(pageInfo);
    }

    @PostMapping("/category/list")
    public ApiRestResponse listCategoryForCustomer(){
        //service目录分级业务逻辑。。。
        //得到分级目录并返回给前端
        List<CategoryVO> categoryVOList = categoryService.listCategoryForCustomer();

        return ApiRestResponse.success(categoryVOList);
    }
}
